extends BaseObject
class_name 事件数据类

 # 基本属性
var id: int
var 事件信息:String
var 品质:int # grade
var 效果数据:Dictionary

var 非随机: bool
var 激活条件=null
var 排除条件=null
var 分支数据:Array
var 默认后续=null

func 初始化数据(data:Dictionary):
	if data.has("id"):
		id=data.id
	if data.has("event"):
		事件信息=data.event
	if data.has("grade"):
		品质=data.grade
	if data.has("effect"):
		效果数据=data.effect
	if data.has("NoRandom"):
		非随机=bool(data.NoRandom)
	if data.has("include"):
		激活条件=data.include		
	if data.has("exclude"):
		排除条件=data.exclude
	if data.has("branch"):
		分支数据=data.branch
	if data.has("postEvent"):
		默认后续=data.postEvent
	
func 事件可触发():
	if (激活条件==null or GameCode.执行语句(激活条件)) and (排除条件==null or not GameCode.执行语句(排除条件)):
		return true
	return false
	
func 事件可随机触发():
	return 事件可触发() and not 非随机

func 事件触发():
	if 事件可触发():
		GameCode.添加信息(事件信息)		
		GameCode.属性生效(效果数据)
		GameCode.EVT.append(id)
		var 触发分支:bool=false
		for 数据 in 分支数据:
			var 事件strs=数据.split(":",false,2)
			var 事件条件=事件strs[0]
			var 事件id=事件strs[1]
			if GameCode.执行语句(事件条件):
				var 分支事件:事件数据类=GameFactory.生成数据模型("事件",事件id)
				if 分支事件.事件可触发():
					分支事件.事件触发()
					触发分支=true
		if not 触发分支 and 默认后续:
			GameCode.添加信息(默认后续)
